汽车ECU标定的实现方式
这篇文章主要内容包括:
常见的xcp标定 ETK技术 VX1000高性能标定 ASAM MCD-1 POD / ASAM MCD-1 XCP v1.5(Debug over XCP)
最初做TC275的基于AUTOSAR XCP协议栈移植,采用的XCP on CAN(现在进化到CanFD和ETH居多),常规是WP->RAM,RP->Flash的映射方式(在此感谢我的老大),借用ETAS一张非常经典的描述XCP的图。
当上位机工具切换到WP时,可以通过download命令,修改RAM的标定常量,如下:
当切换到RP时,可以读取到Flash的原始值,不能修改标定量,标定界面会变为灰色。如下:
再后来,接触到了联电的客户,给我做了一个关于ETK的技术培训;先总结如下:
ETK(Emulatortastkopf) 是一种内存模拟技术,它是 ECU 中的一块特殊用途的电路模块,提供基于并行通讯的应用(与上述xcp on can/eth的串行技术有区别)。ETK 通过直接同控制单元处理器的总线进行连接,从而提供高速数据通讯,ETK 可以单独替代控制器 ECU中的标定数据也可以同时替代控制器 ECU中的标定数据和程序(执行代码)。原理如下:
VX1000的高性能标定实现是基于带POD的ECU,具体如下:
ECU端不需要集成xcp协议栈,ECU端只需要将debug口(NXP叫SWD,英飞凌叫DAP/JTAG)引出,与Vector针对芯片定制的POD(Plug on Device)连接,POD又与VX1000(Base Module)相连接。PC端与串行标定一样作为MC(测量/标定)master,Base Module里集成了XCP Slave协议栈,这意味着什么?Master发送的所有的关于XCP指令,都在VX1000里做出了解析,并根据ASAM MCD-1 POD协议转换成另一种数据帧通过POD->SWD,发送给ECU;M7(ECU)里虽然不集成XCP协议栈,但是根据POD协议,需要集成POD API、POD Service Software、Vendor Service Software等等。不用担心,Vector已经为我们做好了准备,如下:
在高性能测试时,代码里已经没有以前串行标定时DAQ事件触发CanIf_Transmit这个动作了,只有memcpy动作,POD通过DMA的方式直接从OLDA Memory里去获取数据;这样既不会占据总线带宽,也不会消耗cpu过多资源,毕竟现在已经有memcpy按word方式copy的片子了。通过实际代码demo我们也可以看到:
做标定的最先遇到的肯定是ASAM MCD-1 XCP,对slave开发来说,其中的各种指令更是非常熟悉。但是标定工程师不一样,他们主要是对控制算法的调参,如果采用高性能标定的方式,debug被标定工具霸占了,ECU需要debug,那这又怎么办呢?因此在2017年ASAM又提出了debug over xcp的方式,劳特巴赫、isystem相继进行调试器上的优化,如下:
winIdea/Trace32是运行在PC上的XCP Master,它们不会直接向目标发送低级别的调试命令,而是将这些命令封装为XCP命令的形式,发送到POD上的XCP Slave以进行进一步处理。
这些玩法对于国内高端主机厂、tier1来说应该很常见,但对于以成本为导向的供应商、OEM来说,简直就是天书,以至于到目前,我还没接触过这种东西。并且debug over xcp的参与方目前仅有如下单位:
5.小结
https://etas.services/zh/products/etk_fetk_xetk_ecu_interfaces-details.php https://www.asam.net/standards/detail/mcd-1-pod/wiki/ https://www.asam.net/standards/detail/mcd-1-xcp/wiki/ Technical Reference MICROSAR VX1000If
VX1000 - Getting started with TriCore DAP
https://www.isystem.com/products/winidea-xcp-master-debug-and-trace-over-xcp.html
https://www.lauterbach.com/products/software/debugging-via-xcp